<?php
namespace app\admin\controller;

use think\Db;
/**
 * #素材管理#
 */
class Source extends Common{
	/**
	 * #素材列表#
	 * @return view
	 */
	function index(){
		// $uid=$this->user['id'];
		// // 获取素材类别
		// $cate=controller('category')->getCates();
		$params=[
			'options'=>input('options/d',''),
			'keyword'=>input('keyword/s',''),
		];
		$option = array('0'=>'全部','1'=>'用户名','2'=>'素材分类名称','3'=>'素材名称');
		$where='';
		$options=[
			'with'=>'media',
		];

		// 根据传递值生成where条件
		if ($params['keyword'] != '' && $params['options'] == '0') {
			// $where['m.login_name']=['like',"'%".$params['keyword']."%'"];
			// $where['c.name']=['like',"'%".$params['keyword']."%'"];
			// $where['s.title']=['like',"'%".$params['keyword']."%'"];
			$where = 'm.login_name like \'%'.$params['keyword'].'%\' or c.name like \'%'.$params['keyword'].'%\' or s.title like \'%'.$params['keyword'].'%\'';
		}
		elseif ($params['keyword'] != '' && $params['options'] == '1') {
			// $where['m.login_name']=['like',"'%".$params['keyword']."%'"];
			$where = 'm.login_name like \'%'.$params['keyword'].'%\'';
		}
		elseif ($params['keyword'] != '' && $params['options'] == '2') {
			// $where['c.name']=['like',"'%".$params['keyword']."%'"];
			$where = 'c.name like \'%'.$params['keyword'].'%\'';
		}
		elseif ($params['keyword'] != '' && $params['options'] == '3') {
			// $where['s.title']=['like',"'%".$params['keyword']."%'"];
			$where = 's.title like \'%'.$params['keyword'].'%\'';
		}
		elseif ($params['keyword'] == '') {
			# code...
		}
		// var_dump($where);
		
		// if($params['options']>0){
		// 	$where['options']=$params['options'];
		// }
		// if($params['keyword']){
		// 	$where['title']=['title','like',"'%".$params['keyword']."%'"];
		// }
		// $list=model($this->table)->readAll($where,true,$options);
		// $list->appends($params);
		// foreach ($list as $k => $v) {
		// 	if(isset($v['map'])){
		// 		$list[$k]['map']=json_decode($v['map'],true);
		// 	}
		// }

		// 获取所有数据（所有用户、所有分类、所有素材）
		// 获取所有用户
		$user = Db::name('member')->field('id,login_name')->select();

		// 获取说有素材类别
		$cate = Db::name('category')->select();
		// 所有分类、所有素材
		$data = Db::name('source')
				->alias('s')
				->join('category c','c.id = s.cate_id','LEFT')
				->join('member m','m.id = s.uid')
				// ->join('media md','md.source_id = s.id','LEFT')
				->field('s.*,m.login_name,c.name cate_name')
				// ->join('media md','md.source_id = s.id','LEFT')
				// ->field('s.*,m.login_name,c.name cate_name,md.id media_id,md.link media_link,md.type media_type')
				->where($where)
				->order('s.uid desc')
				->paginate();

		$page = $data->render();
		$data = $data->toArray();
		$datas = [];
		foreach ($data['data'] as $k => $val) {
			// print_r($datas);
			$datas[$k] = $val;
			// 将json数据装换成数组，否则地图前台会拿不到地图信息
			$datas[$k]['map'] = json_decode($datas[$k]['map'],true);
			$datas[$k]['media'] = Db::name('media')->where('source_id = '.$val['id'])->select();
			// var_dump($datas);
		}
		// $data['data'] = $datas;
		// print_r($datas);die;
		// $i = 0;
		// foreach ($user as $key => $val) {
		// 	$list[$i] = array(
		// 		'id' 		=> $val['id'],
		// 		'label' 		=> $val['login_name'],
		// 		'level' 	=> 'user',
		// 		'comment' 	=> '',
		// 		'title' 	=> '',
		// 		'msg' 		=> '',
		// 		'remark' 	=> '',
		// 		'map' 		=> '',
		// 		'children' 	=> array()

		// 	);


		// print_r($list);
		// print_r('<br>');
		// print_r($params);
		// print_r('<br>');
		// $list = json_encode($list);
		// $list = substr($list,0,-1);
		// $list = substr($list,1);
		// print_r($data);die;
		// array_unshift($cate, '全部');
		// $this->assign('list',$list);
		$this->assign('userl',$user);
		$this->assign('option',$option);
		$this->assign('params',$params);
		$this->assign('list',$datas);
		$this->assign('cate',$cate);
		$this->assign('page',$page);
		
		// $this->assign('cate',json_encode($cate));
		return view();
	}
	/**
	 * #复制素材#
	 * @return view
	 */
	function copy(){
		// $uid=$this->user['id'];
		// // 获取素材类别
		// $cate=controller('category')->getCates();
		$params=[
			'cate_id'=>input('cate_id/d',''),
			'keyword'=>input('keyword/s',''),
		];

		// 获取所有数据（所有用户、所有分类、所有素材）
		// 获取所有用户
		$user = Db::name('member')->field('id,login_name')->select();

		// 获取说有素材类别
		$cate = Db::name('category')->select();
		// // 所有分类、所有素材
		// $data = Db::name('source')
		// 		->alias('s')
		// 		// ->join('member m','m.id = s.member_id')
		// 		->join('category c','c.id = s.cate_id','LEFT')
		// 		->order('s.uid desc')
		// 		->paginate(2);
		// 所有分类、所有素材
		$data = Db::name('source')
				// ->alias('s')
				// // ->join('member m','m.id = s.member_id')
				// ->join('category c','c.id = s.cate_id','LEFT')
				->order('uid desc')
				->select();

		$i = 0;
		foreach ($user as $key => $val) {
			$list[$i] = array(
				'id' 		=> $val['id'],
				'label' 		=> $val['login_name'],
				'level' 	=> 'user',
				'comment' 	=> '',
				'title' 	=> '',
				'msg' 		=> '',
				'remark' 	=> '',
				'map' 		=> '',
				'children' 	=> array()

			);

			$ii = 0;
			foreach ($cate as $key2 => $val2) {
				// 素材类别
				if ($val['id'] == $val2['uid']) {

					$list[$i]['children'][$ii] = array(
						'id' 		=> $val2['id'],
						'label' 		=> $val2['name'],
						'level' 	=> 'cate',
						'comment' 	=> '',
						'title' 	=> '',
						'msg' 		=> '',
						'remark' 	=> $val2['remark'],
						'map' 		=> '',
						'children' 	=> array()

					);

					
						$iii = 0;
					foreach ($data as $key3 => $val3) {
						// 素材信息
						if ($val['id'] == $val3['uid'] && $val2['id'] == $val3['cate_id']) {

								$list[$i]['children'][$ii]['children'][$iii] = array(
									'id' 		=> $val3['id'],
									'label' 		=> $val3['title'],
									'level' 	=> 'sucai',
									'cate_id' 	=> $val3['cate_id'],
									'uid' 	=> $val3['uid'],
									'type' 	=> $val3['type'],
									'status' 	=> $val3['status'],
									's_time' 	=> $val3['s_time'],
									'comment' 	=> $val3['comment'],
									'title' 	=> $val3['title'],
									'msg' 		=> $val3['msg'],
									'remark' 	=> $val3['remark'],
									'map' 		=> $val3['map'],
									// 'children' 	=> array()

								);;
								$iii++;

						}
					}
					$ii++;
				}
			}
			$i++;
		}

		// print_r($list);
		// print_r('<br>');
		// print_r($params);
		// print_r('<br>');
		// $list = json_encode($list);
		// $list = substr($list,0,-1);
		// $list = substr($list,1);
		// print_r($list);die;
		// array_unshift($cate, '全部');
		$this->assign('list',$list);
		$this->assign('params',$params);
		$this->assign('data',$data);
		
		// $this->assign('cate',json_encode($cate));
		return view();
	}

	/**
	 * #复制素材到指定用户#
	 */
	function copycate(){
		// 获取要复制到对应用户的用户信息
		$datas = input('post.');
		$uid = $datas['uid'];
		$data = $datas['data'];
		// print_r($uid);
		// echo "<br>";
		// var_dump($data);
		// echo "<br>";

		// 判断用户是否存在
		$requser = Db::name('member')->where('id = '.$uid)->find();
		// var_dump($requser);
		// echo "<br>";
		if (!$requser) {
			$this->error('找不到该用户');
		}
		// 根据素材id、分类id获取对应的素材信息和对应的素材分类信息
		$cate_ids = [];
		$ic = 0;
		$ids = '';
		// var_dump($data);die;
		foreach ($data as $k => $val) {
			if ($val['level'] == 'cate') {
				$cate_ids[$ic] = $val['id'];
				$ic++;
			}
			elseif ($val['level'] == 'sucai') {
				$ids .= $val['id'].',';
				// 获取素材对应的素材分类id，防止素材分类为空但素材不为空时报错
				$cate_ids[$ic] = $val['cate_id'];
				$ic++;
			}
		}

		// 将数组转换成字符串
		$cate_ids = implode(',',array_unique($cate_ids));
		// 删除最后一个字符（,）
		$ids = substr($ids, 0, -1);
		// $cate_ids = substr($cate_ids, 0, -1);
		// 获取选择的素材分类数据
		$cdata = Db::name('category')->where('id','in',$cate_ids)->select();
		// 获取选择的素材数据
		$sdata = Db::name('source')->where('id','in',$ids)->select();
		// $media = Db::name('media')->where(	'source_id','in',$ids)->select();

		// 获取用户的素材分类和素材数据
		$cadata = Db::name('category')->where('uid','eq',$uid)->select();
		// 获取选择的素材数据
		$sudata = Db::name('source')->where('uid','eq',$uid)->select();

				// 复制素材
				// select查找素材媒体表的对应信息
				// 循环
		// print_r($media);die;
		// 替换原本绑定的用户信息
		// 判断用户是否已存在勾选的素材信息或素材分类信息
		$data1 = [];
		$i = 0;
		foreach ($cdata as $k => $val) {
			$reg = true;
			$arr = $val;
			unset($arr['id'],$arr['uid'],$arr['s_time']);
			foreach ($cadata as $k2 => $val2) {
				$ar2 = $val2;
				unset($ar2['id'],$ar2['uid'],$ar2['s_time']);
				if ($arr == $ar2) {
					$reg = false;
					// 已存在分类，获取分类id
					$arr['s_time'] = time();
					$arr['uid'] = $uid;
					$arr['id'] = $val2['id'];
					$arr['oid'] = $val['id'];
					$data1[$i] = $arr;
					$i++;
				}
			}
			if ($reg) {
				$arr['s_time'] = time();
				$arr['uid'] = $uid;
				// var_dump($arr);
				$id = Db::name('category')->insertGetId($arr);
				// 判断添加是否成功
				if (!$id) {
					$this->error('复制失败');
				}
				$arr['id'] = $id;
				$arr['oid'] = $val['id'];
				$data1[$i] = $arr;
				$i++;
			}
			// else{
			// 	// 已存在分类，获取分类id
			// 	$arr['s_time'] = time();
			// 	$arr['uid'] = $uid;
			// 	$arr['id'] = $id;
			// 	$arr['oid'] = $val['id'];
			// 	$data1[$i] = $arr;
			// 	$i++;
			// }
		}


		// $data2 = [];
		$si = 0;
		foreach ($sdata as $k => $val) {
			// $arr = [];
			$reg = true;
			$arr = $val;
			unset($arr['id'],$arr['cate_id'],$arr['uid'],$arr['s_time']);
			foreach ($sudata as $k2 => $val2) {
				$ar2 = $val2;
				unset($ar2['id'],$ar2['cate_id'],$ar2['uid'],$ar2['s_time']);
				if ($arr == $ar2) {
					$reg = false;
				}
			}
			if ($reg) {
				// 替换数据（替换cate_id、uid）
				foreach ($data1 as $k3 => $val3) {
					if ($val['cate_id'] == $val3['oid']) {
						$arr['cate_id'] = $val3['id'];
						$arr['uid'] = $uid;
						$arr['s_time'] = time();
					}
				}
				// $data2[$si] = $arr;
				$regsource = Db::name('source')->insert($arr);
				$source_id = Db::name('source')->getLastInsID();

				if ($regsource>0) {
					$si++;
					$arr2 = [];
					$media = Db::name('media')->where('source_id','eq',$val['id'])->select();
					$i4 = 0;
					foreach ($media as $k4 => $v4) {
						// if ($val['id'] == $v4['source_id']) {
						$filename = '/'.date('Ymd').'/'.md5(date('YmdHis').$v4['type'].rand(0,9999)).$v4['ext'];
						// 将文件从 source 拷贝到 destination。如果成功则返回 TRUE，否则返回 FALSE。
						if(copy(env('root_path').'public/uploads/'.$v4['link'],env('root_path').'public/uploads/'.$filename)){
							// 复制文件成功，生成
							$arr2[$i4] = $v4;
							unset($arr2[$i4]['id']);
							$arr2[$i4]['source_id'] = $source_id;
							$i4++;
						}

						// }
					}
					$source = Db::name('media')->insertAll($arr2);
				}
			}
		}
		// 将处理好的数据添加到素材表和素材分类表
		// $source = Db::name('source')->insertAll($data2);
		// var_dump($data2);
		if ($si < 1) {
			$this->error('复制失败');
		}
		else{
			$this->success('成功复制'.$si.'条素材');
		}

		/**
		 * 目标用户：管理员选择的要将素材复制到的指定用户
		 * 原始：管理员在页面上选择的数据
		 */
		// 获取用户提交数据
		// 根据id获取素材和素材分类的详细信息
		// 循环目标用户的素材分类信息，将目标用户缺少的素材分类信息添加到数据库
		// 获取新添加的素材分类id，新建新数组保存目标用户的素材信息和原始的素材分类id
		// 循环素材信息，将原始的素材信息关联的用户信息和素材分类信息替换为目标用户的对应信息
		// 添加目标用户不存在的素材信息
		// 查询原素材的媒体文件信息
		// 替换媒体文件信息复制关联到目标用户的对应素材
		// 返回操作结果

		// // 获取传递数据
		// echo json_encode(input('post.'));
	}

	/**
	 * #获取用户对应的素材分类#
	 */
	function getcate(){
		// 获取用户id
		$uid = input('uid');
		if ($uid == '') {
			$this->error('非法操作');
		}
		// 获取用户对应的素材分类
		$cate = Db::name('category')->where('uid = '.$uid)->select();
		echo json_encode($cate);
	}

	/**
	 * #删除素材#
	 */
	function delsource(){
		// 获取用户id
		$id = input('id');
        
		if ($id == '') {
			$this->error('删除素材失败');
		}
        // 获取当前用户id
        $uid = $this->user['id'];
        // 获取超级管理员的用户id
        $suid = config('auth.super_id');
        // var_dump($suid);
        // 获取当前素材关联的用户id
		$cates = Db::name('source')->where('id = '.$id)->find();
        // 判断当前用户是否是超级管理员
        if ($cates['uid'] == $suid && $uid != $suid) {
            // 修改的是超级管理员的信息，单该用户不是管理员
            $this->error('权限不足');
        }
		// 获取用户对应的素材分类
		$cate = Db::name('source')->where('id = '.$id)->delete();
		// echo json_encode($cate);
		if ($cate > 0) {
			$this->success('删除素材成功');
		}
		else{
			$this->error('删除素材失败');
		}
	}


	/**
	 * #素材添加、编辑#
	 */
	function add($id=0){
		if(request()->isAjax()||request()->isPost()){
			$uid=input('uid');
			if($id>0){
			    $has=model($this->table)->read(['id'=>$id]);
			    //该项不存在或不属于该用户 做添加操作
			    if(empty($has)){
			        $id=0;
			    }
			}
	        // 获取当前用户id
	        $uids = $this->user['id'];
	        // 获取超级管理员的用户id
	        $suid = config('auth.super_id');
	        // var_dump($suid);
	        // 获取当前素材关联的用户id
			// $cates = Db::name('source')->where('id','in',$ids)->field('uid')->select();
			// $cates = json_decode($cates,true);
			// var_dump(in_array(['uid'=>$suid], $cates, TRUE));die;
			// if (in_array(['uid'=>$suid], $people, TRUE)) {
			// 	# code...
			// }
	        // 判断当前用户是否是超级管理员
	        if ($uid == $suid && $uids != $suid) {
	            // 修改的是超级管理员的信息，单该用户不是管理员
	            $this->error('权限不足');
	        }

			$options=input('options/a',[]);
			$images=input('images/a',[]);
			$data=[
				'id'=>$id,
				'uid'=>$uid,
				'title'=>input('title/s',''),
				'status'=>input('status/d',1),
				'cate_id'=>input('cate_id/d',1),
				'remark'=>input('remark/s',''),
			];
			$validate=$this->validate($data,[
				'title|素材标题'=>'require',
				'cate_id|素材分组'=>'require',
			]);
			if(true!==$validate){
				$this->error($validate);
			}
			if(isset($options['map'])){
				$options['map']=json_encode($options['map']);
			}
			$data=array_merge($data,$options);
			$operation=false;
			if($data['id']>0){
				$operation=model($this->table)->edit($data);
			}else{
				// $data['uid']=$uid;
				$data['s_time']=time();
				$operation=model($this->table)->add($data);
			}
            $source_id=$data['id'];
            if(isset($operation['id'])){
            	$source_id=$operation['id'];
            }
            foreach ($images as $k => $v) {
            	$images[$k]=['id'=>$v,'source_id'=>$source_id];
            }
            // 绑定媒体文件
            if(count($images)){
            	model('media')->edit($images);
            }
            $this->success(lang('Successful operation'));
		}
	}
	/**
	 * #素材删除#
	 * @param  integer $id [description]
	 * @return [type]      [description]
	 */
	function del($id=0){
		if(request()->isAjax()||request()->isPost()){
			$ids=input('ids/a',[]); // 多项删除
	        if($id<=0&&empty($ids)){
	            $this->error(lang('Data does not exist'));
	        }
			// $uid=$this->user['id'];
			$where=['id'=>$id];
			// var_dump($id);
	        // 获取当前用户id
	        $uid = $this->user['id'];
	        // 获取超级管理员的用户id
	        $suid = config('auth.super_id');
	        // var_dump($suid);
	        // 获取当前素材关联的用户id
			$cates = Db::name('source')->where('id','in',$ids)->field('uid')->select();
			$cates = json_decode($cates,true);
			// var_dump(in_array(['uid'=>$suid], $cates, TRUE));die;
			// if (in_array(['uid'=>$suid], $people, TRUE)) {
			// 	# code...
			// }
	        // 判断当前用户是否是超级管理员
	        if (in_array(['uid'=>$suid], $cates, TRUE) && $uid != $suid) {
	            // 修改的是超级管理员的信息，单该用户不是管理员
	            $this->error('权限不足');
	        }

			$map=['source_id'=>$id];
			if(!empty($ids)){
				$where=[
					'id'=>['id','in',$ids]
				];
				$map=[
					'source_id'=>['source_id','in',$ids]
				];
			}
	        $del=model($this->table)->del($where);
	        if($del){
	            // 媒体删除
				$this->delImage(0,$map);
	            $this->success(lang('Successful operation'));
	            die;
	        }
	        $this->error(lang('Failed operation'));
	    }
    }


    /**
     * #素材图片删除#
     * @param  integer $id [媒体文件数据id]
     * @return [type] [description]
     */
    function mediaDel(){
    	if(request()->isAjax()||request()->isPost()){
    		$id = input('id');
	    	// 获取当前用户id
	        $uids = $this->user['id'];
	        // 获取超级管理员的用户id
	        $suid = config('auth.super_id');
	        // var_dump($suid);
	        // 获取当前素材关联的用户id
			$media = Db::name('media')->alias('m')->join('source s','s.id = m.source_id','LEFT')->where('m.id','eq',$id)->field('s.uid,m.source_id id')->find();
			// $cates = json_decode($cates,true);
			// var_dump(in_array(['uid'=>$suid], $cates, TRUE));die;
			// if (in_array(['uid'=>$suid], $people, TRUE)) {
			// 	# code...
			// }
	        // 判断当前用户是否是超级管理员
	        if ($media['uid'] == $suid && $uids != $suid) {
	            // 修改的是超级管理员的信息，单该用户不是管理员
	            $this->error('权限不足');
	        }
	        else{
	        	return $this->delImage($id);
	        }
        }
    }


	/**
	 * 获取管理媒体的素材
	 * @param  array  $where 条件
	 * @return json
	 */
	function getSources($cate_id=0,$keyword='',$where=[]){
		$options=[
			'with'=>'media',
		];
		if($cate_id>0){
			$where['cate_id']=$cate_id;
		}
		if($keyword){
			$where['title']=['title','like',"'%$keyword%'"];
		}
		$source=model('source')->readAll($where,true,$options);
		foreach ($source as $k => $v) {
			if(isset($v['map'])){
				$source[$k]['map']=json_decode($v['map'],true);
			}
		}
		return json_encode($source->toArray());
	}
}